#Importa os pacotes necessarios
import pygame, random, os

#Define a largura e a altura do exemplo
WIDTH = 150
HEIGHT = 200

ypos = 75
done =  False
x_rate_back = 300.0/WIDTH  
x_rate_fore = 800.0/WIDTH

#Define a area da tela que sera pintada
viewport = pygame.Rect(0,0,150,200)
backView = pygame.Rect(0,0,150,200)
foreView = pygame.Rect(0,0,150,200)
	
# Carrega os arquivos de imagens (PNG)
def InitImages():
	global back,fore,middle
	back = pygame.image.load(os.path.join('data',"back.png"))  
  	fore = pygame.image.load(os.path.join('data',"fore.png"))
	middle = pygame.image.load(os.path.join('data',"ovni.png"))

				
#Desenha a imagem de fundo
def DrawBack(scr):
	#Usa a area que vai sempre pintada da imagem
	scr.blit(back,viewport,backView)

#Desenha a imagem frontal
def DrawFore(scr):
	#Usa a area que vai sempre pintada da imagem
	scr.blit(fore,viewport,foreView)


#Desenha o disco voador sempre centralizado na tela
def DrawOvni(scr):	
	dest = pygame.Rect(35,ypos,81,52)
	scr.blit(middle,dest)

#Desenha a cena
def DrawScene(scr):
	DrawBack(scr)
	DrawOvni(scr)
	DrawFore(scr)
	pygame.display.flip()


def processEvents():	
	global ypos,backView,foreView,done
		
	#Efetua o tratamento de eventos
	for event in pygame.event.get():
		if event.type == pygame.QUIT or \
			(event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
				done = True	

	#Verifica o status das teclas.
	#Conforme a tecla pressionada, movimenta-se
	#o background e o foreground.
	keys = pygame.key.get_pressed()
    
	if keys[pygame.K_UP]: 
		ypos -= 1 
		if ypos<0: ypos = 0
		
	elif keys[pygame.K_DOWN]: 
		ypos = ypos + 1 
		if ypos>148: ypos = 148
		
	elif keys[pygame.K_LEFT]: 		
		backView.x = backView.x - (x_rate_back+0.5)
		if backView.x<0: backView.x =0
	
#	elif keys[pygame.K_SPACE]:
#		backView.x = backView.x - (x_rate_back+0.5)
#		if backView.x<0: backView.x =0

		foreView.x = foreView.x - (x_rate_fore+0.5)
		if foreView.x<0: foreView.x = 0
		
	elif keys[pygame.K_RIGHT]: 
		backView.x = backView.x + (x_rate_back+0.5)
		if backView.x>backView.w: backView.x = backView.w		
		
		foreView.x = foreView.x + (x_rate_fore+0.5)
		if foreView.x>650.0: foreView.x = 650.0	

def playMusic():		
	music = os.path.join('data','xfile.mid')
	pygame.mixer.music.load(music)  #Deixa music ativa
	pygame.mixer.music.play(-1)		#Executa em loop
		
def MainLoop(scr):
	global backView, foreView
	global done					
	
	#Reproduz o som em loop
	playMusic()
	
	#Faca enquanto esta feito	
	while(done != True):
		clock = pygame.time.Clock()		#Para sincronizar		
		
		#Processa os eventos
		processEvents()

		#Desenha a cena
		DrawScene(scr)

		#Sincroniza para manter 40fps
		clock.tick(33)				

#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
#Metodo principal de uma aplicao Python
def main(winstyle = 0):
	pygame.init()
	pygame.mixer.init()
	
	#Troca o titulo da janela
	pygame.display.set_caption('Parallax Effect')
	screen = pygame.display.set_mode((150,200),pygame.HWSURFACE|pygame.DOUBLEBUF)
	if screen == None:
		print "Erro na criacao da screen"
	
 
  	#Carrega as imagens e pinta a imagem de fundo
  	InitImages()
  	 

	#Entra no loop principal
  	MainLoop(screen)

  	#Encerra o audio
  	pygame.mixer.quit()
  	pygame.quit()
 

#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
#Usado para definir qual eh o metodo main da aplicacao
if __name__ == "__main__":
    main()
    
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-